ARRRG! FEJL![/cry]

Tags:    c++

<< < 123 > >>
Hej Udvikleren. Jeg har i løbet af 12 uger arbejdet på et teknologi projekt omhandlende et alarmsystem. Jeg startede med omkring 300 fejl. Dem fik jeg ned på få fejl, men selvfølgelig kommer der nogle nye, når man retter nogle andre. Og da jeg skal aflevere imorgen, vil jeg lige høre om i hurtigt kunne læse koden igennem, samt kommentere hvad jeg skal gøre for at få den til at virke. Jeg er en begynder, så koden burde ikke være så advanceret for jer. Jeg er først rigtig blevet forvirret, da jeg skulle have opklaret nogle problemer med et objekt array. Fejlen kunne løses ved at lave to klasser, og det giver problemer i mine funktioner og variabler.
Her er koden:
Fold kodeboks ind/udKode 

Og her er compiler loggen:
Fold kodeboks ind/udKode 




22 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
hva er det for en overskrift man!



din createsensor funktion kan f.eks. se sådan ud:

Fold kodeboks ind/udKode 

mener ihvertfald du skal bruge Sensor sensor;
ellers tror jeg ikke at compileren ved hvad du mener.



Hver gang du opretter et sensor objekt, kalder maskinen en constructor for objektet. Hvis du bare vil oprette et objekt - e.g. 'Sensor s', leder compileren efter en constructor uden argumenter (altså en Sensor::sensor(){} ). Men du har kun 1 constructor, der ser sådan her ud:
Fold kodeboks ind/udKode 

Når du opretter dit array vil den prøve at skabe 30 sensor-objekter, men det kan den ikke, for den ved ikke hvilke værdier den skal give sensor objekter (e.g. navn, vigtig etc...).
Du gør det hele meget nemmere for dig selv hvis du dropper det der c-style array og bruger en vector i stedet:
Fold kodeboks ind/udKode 

Du kan stadig indexere med nySensor, men antal og den slags kan du få med nySensor.size();



1
Fold kodeboks ind/udKode 

I SensorList klassen har du defineret en metode, som hedder CreateSensor, og som returnerer et Sensor objekt, men i din implementering er returtypen 'void'.

2
I CreateSensor bruger du tre lokale variable: 'navn', 'vigtig' og 'rum', men de skal defineres før de kan bruges. Er det strings ? Integers ?

Du fortsætter så med at returnere et Sensor objekt som skal initialiseres fra en række variable, de fleste er ikke defineret nogen steder. Hvor har du 'aktiv', 'normal' og 'vaerdi' fra ?

3
Samme problem har du i sendMsg metoden på SensorList. Hvor har du defineret 'backup', 'vigtigMedium', 'vigtigSmall', osv. ?

ooog så videre. Compileren fortæller dig faktisk, hvorfor den ikke kan forstå din kode.



Til Robert:
1. Hmm forslag til en forbedring. Koden er her fra udvikleren, fra en anden forum tråd. Hvor det var løsningen til at oprette x antal constructorer.
2. Hmm. Hvordan skal jeg så gøre det.? Jeg skal have brugeren til at indtaste oplysningerne, som bagefter bliver smidt ned i objectet. Navn og rum er tekster(som du kan se i klassen, hvor jeg definerer det(char)). Vigtig er et tal(int).

Til det andet, så troede jeg at der var en slags "default" ved initaliseringen, som lød på 0. De værdier brugeren ikke indtaster, skal være 0 eller false.
3. Problemet er bare hvordan jeg får adgang til de variabler i Sensor objektet!????
Håber du stadig kan hjælpe! Tak for hurtig respons.



dit problem er at compileren ikke ved at det er de variabler fra klassen Sensor som den skal bruge, og den kan heller ikke ændre dem da de er private. det nemmeste jeg kan se er at have en funktion i Sensor klassen der kan ændre variablerne i Sensor klassen, og oprette nogle lokale temp variabler i din CreateSensor funktion og de andre funktioner der skal ændre private variabler



Har rettet nogle fejl. Om det er blevet bedre ved jeg faktisk ikke, dog er der knapt så mange kompiler fejl mere.
Fold kodeboks ind/udKode 

Robert:
Jeg forstår simpelthen ikke hvordan jeg skal lave den funktion så? Den skal jo både retunere text og tal og boolske værdier..??
Du skrev:
I SensorList klassen har du defineret en metode, som hedder CreateSensor, og som returnerer et Sensor objekt, men i din implementering er returtypen 'void'.





det robert siger er at hvis du definerer en funktion som void, f.eks. void enFunktion() siger du dermed til compileren at der ikke er nogen returværdi, altså er det en fejl når du beder funktionen om at returnere noget. uden at være sikker skal deklerationen være
Fold kodeboks ind/udKode 

som du også har skrevet i klassen.

omkring at ændre de værdier der er i klassen er det kun en funktion der er medlem af klassen der kan ændre dem når de er under private, altså kan du lave en public funktion til at ændre de private variabler der er i Sensor klassen



Har gjort dem alle public.
Får vildt mange undeclared identifier. Hvad skal jeg gøre ved det? Hvis det fx er inde i SensorList::CreateSensor(): Kan jeg så skrive Sensor::navn. eller hvad skal jeg gøre??



du kan gøre sådan:

Fold kodeboks ind/udKode 


så får du adgang til variablen i klassen.
men den rigtige måde er at lave en funktion til at gøre dette




<< < 123 > >>
t